home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Wonky Flux Batch 2019 02
/
Wonky_Flux_Batch_2019-02.zip
/
Wonky Flux Batch 2019-02
/
077 - MousePaint Drawing Program - 68C-3005-A - 1984.dsk
/
INTRO
/
MOUSE.INTRO.bas
< prev
next >
Wrap
BASIC Source File
|
2019-02-17
|
21KB
|
445 lines
5 GOTO 3000
10 DT = 0:D9 = 0:NR = 0: GOSUB 100
15 OX = X:OY = Y: INPUT "";X,Y,B
17 B = ABS(B)
22 IF X >XL THEN X = XL
26 IF Y >YL THEN Y = YL
30 ON T9 GOSUB 200,250,300,350,400,450,500
40 IF (X = OX) AND (Y = OY) THEN 75
45 POKE DB +18,64: CALL ADDR +9
50 IF X >255 THEN 60
55 POKE DB,X: POKE DB +1,0: GOTO 65
60 POKE DB,X -256: POKE DB +1,1
65 POKE DB +2,Y: POKE DB +18,128: CALL ADDR +9
70 POKE DB +18,0: CALL ADDR +9
75 IF D9 THEN 90
80 GOTO 15
90 ON T8 GOSUB 950,970
92 PX = X:PY = Y
95 PRINT D$;"IN#0": VTAB 1
99 RETURN
100 PRINT D$;"IN#";S4: RETURN
170 GOSUB 1850: GOSUB 100:T8 = 1: GOSUB 90:T8 = 0: GOSUB 1800: RETURN
200 NR = NR +1:DT = DT + ABS(OX -X) + ABS(OY -Y)
205 IF PEEK( -16384) <127 THEN 220
210 D9 = PEEK( -16384): POKE -16368,0:D9 = (D9 = 141): IF D9 THEN RETURN
220 D9 = (NR >550): IF D9 THEN NR = -1: RETURN
230 RETURN
250 GOSUB 1600:D9 = (SH = 3)
255 IF D9 THEN 270
260 NR = NR +1:D9 = (NR >100)
265 IF D9 THEN NR = -1
270 RETURN
300 D9 = (B <3) OR (NR >100)
310 RETURN
350 D9 = (B <3): RETURN
400 NR = NR +1:DT = DT + ABS(X -OX) + ABS(Y -OY):D9 = (B >2): RETURN
450 GOSUB 1600:D9 = (SH = 2): RETURN
500 D9 = (B >2)
510 OB = BOX:OS = SUBMENU: IF (Y >MY) AND (Y <MY +8) THEN 700
515 IF (Y <MY) THEN SU = -1: GOTO 600
520 IF (BOX <0) THEN 800
525 XT = ML(BOX,0): IF (X <XT *7) OR (X >(XT +ML(BOX,1)) *7) THEN SU = -1: GOTO 600
530 SU = INT((Y -(MY +1))/8): IF (SU < = 0) OR (SU >3) THEN SU = -1: GOTO 600
535 IF MT$(BOX,SU) = "" THEN SU = -1: GOTO 600
600 IF (SU = OS) THEN 800
602 POKE DB +18,64: CALL ADDR +9
605 POKE 32,ML(BOX,0): POKE 33,ML(BOX,1): POKE 3092,2
610 IF (OS > = 0) THEN POKE 34,MR +OS: POKE 35,MR +OS +1: PRINT CHR$(12);
620 IF (SU > = 0) THEN POKE 34,MR +SU: POKE 35,MR +SU +1: PRINT CHR$(12);:VI(BOX,SU) = 1
630 POKE 3092,0: POKE DB +18,128: CALL ADDR +9: GOTO 800
700 XT = INT(X/7):BOX = -1: FOR I = 0 TO NB -1: IF (XT > = ML(I,0)) AND (XT <ML(I +1,0)) AND (BOX <0) THEN BOX = I
705 NEXT
710 IF BOX = OB THEN 800
715 POKE DB +18,64: CALL ADDR +9
720 POKE 32,MC: POKE 33,39 -MC: POKE 34,MR +1: POKE 35,MR +MS +1: POKE 3092,1: PRINT CHR$(12);: POKE 3092,0
725 POKE 34,MR: POKE 35,MR +1: POKE 3092,2
730 IF (OB > = 0) THEN POKE 32,ML(OB,0): POKE 33,ML(OB +1,0) -ML(OB,0): PRINT CHR$(12);
735 IF (BOX <0) THEN 770
740 POKE 32,ML(BOX,0): POKE 33,ML(BOX +1,0) -ML(BOX,0): PRINT CHR$(12);: POKE 3092,0
745 POKE 34,MR +1: POKE 33,ML(BOX,1):J = 0: FOR I = 1 TO 3: IF MT$(BOX,I) < >"" THEN J = I
750 NEXT : POKE 35,MR +J +1: PRINT CHR$(12);: FOR I = 1 TO J: PRINT MT$(BOX,I): NEXT
760 VI(BOX,0) = 1
770 SU = -1: POKE DB +18,128: CALL ADDR +9
800 RETURN
950 INPUT "";X1,Y1,B1: IF ABS(B1) <3 THEN 950
960 RETURN
970 GOSUB 1800: IF (BOX <0) THEN RETURN
972 POKE 3092,2: POKE 32,ML(BOX,0): POKE 33,ML(BOX +1,0) - PEEK(32): POKE 34,MR: POKE 35,MR +1: PRINT CHR$(12);: POKE 3092,0
975 GOSUB 52130
980 RETURN
1600 SH = (X >SX) AND (X <SX +21) AND (Y >SY) AND (Y <SY +21): IF SH THEN RETURN
1610 SH = (X >TX +3) AND (X <TX +18) AND (Y >TY) AND (Y <TY +11): IF SH THEN SH = 2: RETURN
1620 SH = (X >CX) AND (X <CX +21) AND (Y >CY) AND (Y <CY +21): IF SH THEN SH = 3: RETURN
1630 SH = (X >BX -3) AND (X <BX +L *7 +3) AND (Y >BY -3) AND (Y <BY +12): IF SH THEN SH = 4: RETURN
1640 RETURN
1650 IF X >256 THEN POKE DB,X -256: POKE DB +1,1: GOTO 1670
1660 POKE DB,X: POKE DB +1,0
1670 POKE DB +2,Y: POKE DB +3,0: RETURN
1700 REM SET UP AN ICON
1710 POKE DB +19,MASK: CALL ADDR +6
1720 POKE DB +19,IKE: CALL ADDR +3
1730 XL = 279 - PEEK(DB +8) *7:YL = 191 - PEEK(DB +6)
1740 IF X >255 THEN POKE DB,X -256: POKE DB +1,1: GOTO 1760
1750 POKE DB,X: POKE DB +1,0
1760 POKE DB +2,Y: POKE DB +3,0
1770 POKE DB +18,128: CALL ADDR +9: REM SAVE
1780 POKE DB +18,0: CALL ADDR +9: REM PLOT
1790 RETURN
1800 REM ERASE POINTER
1810 POKE DB +18,64: CALL ADDR +9:PX = X:PY = Y
1820 RETURN
1850 REM RESTORE POINTER
1860 X = PX:Y = PY:IKE = 7:MASK = 11: GOSUB 1700
1870 RETURN
1900 REM Jump to marker
1910 POKE A9 +8,RN: FOR I8 = 0 TO 2: POKE A9 +9 +I8,M9(I9,I8): NEXT : CALL A9 +3
1920 RETURN
2000 GOSUB 1800:X = DX:Y = DY:IKE = DI:MASK = DM: POKE DB +19,MASK: CALL ADDR +6: POKE DB +19,IKE: CALL ADDR +3
2010 CALL ADDR +15: GOSUB 1650
2015 POKE DB +18,64: CALL ADDR +9
2020 PRINT CHR$(14);: GOSUB 1720:X = DX:Y = DY: GOSUB 59400: RETURN
2100 CALL ADDR +12: PRINT CHR$(18);: GOSUB 1780
2110 DX = X:DY = Y:PX = X +4:PY = Y +4: GOSUB 1850: RETURN
2150 L = LEN(SV$(1)): POKE 32,CC: POKE 33,L: POKE 34,CR: POKE 35,CR +1: PRINT CHR$(12);SV$(1)
2160 BX = CC *7:BY = CR *8 -1: HPLOT BX,BY TO BX +L *7,BY TO BX +L *7,BY +9 TO BX,BY +9 TO BX,BY
2165 POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,10: RETURN
2170 POKE 32,CC -1: POKE 33,L +2: POKE 34,CR -1: POKE 35,CR +2: POKE 3092,1: PRINT CHR$(12);: POKE 3092,0: GOSUB 57000:BX = -1:BY = -1:L = 0: RETURN
2200 IF (SU <0) OR (BOX <0) OR (BOX > = NB) THEN 2270
2220 IF (BOX = 0) THEN 2240
2230 FI = 3 +SU:IKE = FI:MASK = 10:X = CX:Y = CY: GOSUB 1700: GOTO 2270
2240 IF (FR) AND (SU = 2) THEN FR = 0: GOSUB 2400: GOTO 2260
2250 X = SX:Y = TY -RR:IKE = 9:MASK = 9: PRINT CHR$(14);: GOSUB 1700: PRINT CHR$(18);
2260 RR = (8 *(SU -1)):X = SX:Y = TY -RR:IKE = 2: GOSUB 1700
2270 GOSUB 1850: RETURN
2400 X = SX: FOR I = 0 TO 8:Y = TY -I:IKE = 9:MASK = 9: PRINT CHR$(14);: GOSUB 1700
2410 IKE = 2: GOSUB 1700: PRINT CHR$(18);: GOSUB 1700
2420 NEXT : RETURN
3000 ONERR GOTO 62100
3001 DIM M9(5,2),SV$(5),SN(5),MT$(2,3),ML(3,1),VI(2,3)
3002 IF PEEK(104) < >64 THEN POKE 16384,0: POKE 104,64: POKE 103,1: PRINT CHR$(4);"RUN MOUSE.INTRO"
3005 GOSUB 59000
3010 GOSUB 59100: GOSUB 53000
3015 POKE 34,10: POKE 3092,1: PRINT CHR$(12);: POKE 3092,0
3020 GOSUB 57000
3025 PRINT CHR$(12);
3030 HCOLOR= 3: FOR I = 0 TO 1: HPLOT I,80 +I TO 279 -I,80 +I TO 279 -I,191 -I TO I,191 -I TO I,80 +I: NEXT : HCOLOR= 0: PRINT CHR$(18);:
3035 GOSUB 60200
3050 IKE = 0:MASK = 8:X = 15:Y = 125:SX = X:SY = Y: GOSUB 1700
3054 IKE = 2:MASK = 9:X = 45:TX = X:TY = Y: GOSUB 1700
3058 IKE = 3:MASK = 10:X = 75:CX = X:CY = Y: GOSUB 1700
3065 IKE = 7:MASK = 11:X = TX +4:Y = TY +20: GOSUB 1700
3070 GOSUB 59300: IF S4 = 0 THEN TEXT : HOME : GOTO 9000
3072 IF S4 <0 THEN TEXT : HOME : GOTO 9200
3075 GOSUB 59400
3100 VTAB 1:N$ = "INTROTEXT": GOSUB 54000: GOSUB 54100
3102 OX = X:OY = Y: PRINT D$;"IN#";S4
3105 FOR I = 0 TO 7: GOSUB 1800: FOR J = 0 TO 3
3110 INPUT "";X,Y,B: IF (X < >OX) OR (Y < >OY) THEN GOSUB 1850:NR = 1: GOTO 3140
3115 NEXT : GOSUB 1850: FOR J = 0 TO 3
3120 INPUT "";X,Y,B: IF (X < >OX) OR (Y < >OY) THEN 3140
3130 NEXT : NEXT :TT = 0
3140 T9 = 1:T8 = 1: GOSUB 10
3145 I9 = 1: GOSUB 1900
3150 TT = TT +DT: IF TT >200 THEN 3180
3155 IF DT >0 THEN ND = 1: GOSUB 56000: GOTO 3170
3160 ND = 2: GOSUB 56000
3170 GOSUB 54100: GOSUB 3140
3180 GB = 0: GOSUB 1600: IF SH = 3 THEN ND = 6: GOSUB 56000:GB = 1: GOTO 3300
3190 GOTO 3200
3200 REM Move into circle
3205 ND = 3: GOSUB 56000: GOSUB 54100
3210 T9 = 2:T8 = 1: GOSUB 10:I9 = 1: GOSUB 1900
3220 IF (NR <0) THEN ND = 1: GOSUB 56000: GOSUB 54100: GOTO 3210
3230 ND = 2: GOSUB 56000
3300 REM Now click button
3310 GOSUB 54100: IF NOT GB THEN ND = 1: GOSUB 56000
3320 T8 = 0: GOSUB 54100: GOTO 3330
3325 GOSUB 170
3330 X = PX:Y = PY: GOSUB 59400
3335 T9 = 3: GOSUB 10:I9 = 1: GOSUB 1900
3340 IF (B >2) THEN ND = 2: GOSUB 56000: GOSUB 54100: GOTO 3330
3350 GOSUB 1600: IF SH < >3 THEN ND = 1: GOSUB 56000: GOSUB 54100: GOTO 3335
3370 GOSUB 1800
3380 PX = X:PY = Y:X = CX:Y = CY:IKE = 4:MASK = 10: GOSUB 1700
3390 GOSUB 170: GOSUB 1850: GOSUB 2150
3420 GOSUB 57000:ND = 3: GOSUB 56000: GOSUB 54100
3500 REM Practise clicking
3505 CI = 1:TI = 1:SI = 1:L = LEN(SV$(1)):NC = 0:ND = 1
3510 T9 = 4: GOSUB 10: GOSUB 1800
3520 GOSUB 1600: IF SH = 0 THEN 3590
3530 ON SH GOSUB 3540,3550,3560,3700: GOTO 3580
3540 SI = NOT SI:I = SI:X = SX:Y = SY:IKE = 0:MASK = 8: RETURN
3550 TI = NOT TI:I = TI:X = TX:Y = TY:IKE = 2:MASK = 9: RETURN
3560 CI = NOT CI:I = CI:X = CX:Y = CY:IKE = 3 +CI:MASK = 10: RETURN
3580 PRINT CHR$(14 +4 *I): GOSUB 1700: PRINT CHR$(18);
3585 PRINT CHR$(14 +4 *I): GOSUB 1700: PRINT CHR$(18);
3590 GOSUB 170: GOSUB 1850
3600 IF SH >0 THEN NC = NC +1
3610 IF NC = 8 THEN ND = 0: GOSUB 54100
3620 GOTO 3510
3700 GOSUB 2170: GOSUB 170
3720 IF NOT SI THEN GOSUB 3540: GOSUB 1700
3730 IF NOT TI THEN GOSUB 3550: GOSUB 1700
3740 IF NOT CI THEN GOSUB 3560: GOSUB 1700
3745 GOSUB 1850
4000 REM What a drag...
4005 GOSUB 56000: GOSUB 54100: CALL ADDR +18:T8 = 0
4010 T9 = 4: GOSUB 10: GOSUB 1600: IF SH = 2 THEN 4030
4015 I9 = 1: GOSUB 1900:ND = 1: GOSUB 56000: PRINT CHR$(18);: GOSUB 54100
4020 T9 = 6: GOSUB 10: IF (B <3) THEN 4030
4025 GOTO 4010
4030 DI = 2:DM = 9:DX = TX:DY = TY: GOSUB 2000
4040 T9 = 5: GOSUB 10: GOSUB 2100:I9 = 1: GOSUB 1900
4050 TX = DX:TY = DY:GB = 1
4070 IF (X >SX -9) AND (X <SX +9) AND (Y >SY -19) AND (Y <SY) THEN PRINT CHR$(18);: GOTO 4300
4090 IF (NR <5) OR (DT <30) THEN ND = 2: GOSUB 56000: PRINT CHR$(18);: GOSUB 54100: GOTO 4010
4100 REM Dragged, but not above square
4110 GB = 0:ND = 3: GOSUB 56000: PRINT CHR$(18);: GOSUB 54100: GOSUB 54100:ND = 1: GOSUB 56000: GOSUB 54100
4120 T9 = 4: GOSUB 10: GOSUB 1610: IF SH < >2 THEN 4120
4130 GOSUB 2000:T9 = 5
4140 GOSUB 10: GOSUB 2100:TX = DX:TY = DY:I9 = 1: GOSUB 1900
4150 IF (X >SX -9) AND (X <SX +9) AND (Y >SY -19) AND (Y <SY) THEN ND = 2: GOSUB 56000: GOTO 4300
4160 ND = 1: GOSUB 56000: PRINT CHR$(18);: GOSUB 54100: GOTO 4120
4300 X = DX:Y = DY:IKE = 9:MASK = 9: PRINT CHR$(14);: GOSUB 1700: PRINT CHR$(18);:
4310 A7 = 4864: POKE A7 +16, PEEK(A7 +16) -1: POKE A7 +65, PEEK(A7 +65) -1
4320 X = SX:Y = SY:IKE = 1:MASK = 8: GOSUB 1700
4330 X = SX:Y = SY -9:IKE = 2:MASK = 9: GOSUB 1700:TX = X:TY = Y
4335 POKE A7 +16, PEEK(A7 +16) +1: POKE A7 +65, PEEK(A7 +65) +1
4340 X = SX +5:Y = SY -5: GOSUB 1850
4350 GOSUB 2150: IF NOT GB THEN 4400
4360 ND = 3: GOSUB 56000: GOSUB 54100:ND = 1: GOSUB 56000: GOSUB 54100: GOSUB 54100
4380 T9 = 4:T8 = 0: GOSUB 10: GOSUB 1600: IF SH < >4 THEN 4380
4390 PX = X:PY = Y: GOSUB 2170: GOSUB 170
4400 I9 = 1: GOSUB 1900:ND = 2: GOSUB 56000: GOSUB 54100
4405 IF GB THEN GOSUB 2150: GOSUB 1850
4410 DI = 3:DM = 10:DX = CX:DY = CY: CALL ADDR +18
4420 T9 = 4:T8 = 0: GOSUB 10
4430 GOSUB 1620: IF SH = 4 THEN 4500
4435 IF SH < >3 THEN 4420
4440 DI = 3:T9 = 5:T8 = 0: GOSUB 2000: GOSUB 10
4450 DI = 4: POKE DB +19,DI: CALL ADDR +3: GOSUB 2100
4460 CX = DX:CY = DY: GOTO 4420
4500 REM Introduce menus
4505 FR = 1: GOSUB 170: GOSUB 54100
4510 PRINT D$;"CLOSE ";N$:N$ = SV$(5): GOSUB 54000
4520 X = DX:Y = DY:IKE = 4:MASK = 10: POKE DB +19,MASK: CALL ADDR +6: POKE DB +19,IKE: CALL ADDR +3
4530 CALL ADDR +15: GOSUB 1650
4540 POKE DB +18,64: CALL ADDR +9:CX = 75:CY = SY:X = CX:Y = CY: GOSUB 1730: GOSUB 1850
4545 GOSUB 2170
4550 GOSUB 52200:FI = 4:RR = 0:TY = SY -9
4555 GOSUB 52000: GOSUB 54100:ND = 3: GOSUB 56000:ND = 1: FOR I = 1 TO 5: GOSUB 54100:ND = 1: GOSUB 56000: NEXT
4560 GOSUB 52100: GOSUB 57000:GB = 0:I9 = 0: GOSUB 1900: GOSUB 54100: GOSUB 54100
4565 GOSUB 2150: GOSUB 1850:T9 = 4:T8 = 0
4570 GOSUB 10: GOSUB 1600: IF SH < >4 THEN 4570
4580 GOSUB 1800: GOSUB 2170: GOSUB 170: GOSUB 54100:GB = 1 -GB: IF GB THEN 4565
4590 GOSUB 1850: GOSUB 52200: GOSUB 10:T9 = 7:T8 = 2: GOSUB 10: GOSUB 1600: GOSUB 2200
4595 GOSUB 57000:I9 = 1: GOSUB 1900: GOSUB 1800
4600 IF (BOX = 0) AND (SU = 2) THEN 5000
4610 IF VI(0,0) OR VI(1,0) THEN 4650
4615 IF SH = 2 THEN I9 = 1: GOTO 4700
4620 I9 = 2: GOTO 4700
4650 IF VI(1,0) AND ( NOT VI(0,0)) THEN I9 = 5: GOTO 4700
4660 IF VI(0,2) THEN I9 = 4: GOTO 4700
4670 I9 = 3
4700 GOSUB 57000: GOSUB 1900:ND = 1: GOSUB 56000: GOSUB 54100: GOTO 4590
5000 GOSUB 58000:I9 = 5: GOSUB 1900:ND = 2: GOSUB 56000: GOSUB 54100
5005 GOSUB 2150: GOSUB 1850
5010 T9 = 4:T8 = 0: GOSUB 10: GOSUB 1620: IF SH < >4 THEN 5010
5015 GOSUB 2170: GOSUB 170
5020 GOSUB 54100: GOSUB 52100: GOSUB 2150: GOSUB 1850
5030 GOSUB 52200: GOSUB 10:T9 = 7:T8 = 2: GOSUB 10: GOSUB 1600: GOSUB 2200
5040 IF SH < >4 THEN 5030
5050 GOSUB 2170: GOSUB 58000
5100 REM Introduce put-away icon
5110 GOSUB 54100: GOSUB 2150: GOSUB 1850:T9 = 4:T8 = 0
5120 GOSUB 10: GOSUB 1600: IF SH < >4 THEN 5120
5130 PX = X:PY = Y: GOSUB 2170: GOSUB 170
5140 GOSUB 54100: GOSUB 59400: POKE 3092,2: POKE 32,2: POKE 33,3: POKE 34,12: POKE 35,13
5150 X = PX:Y = PY:NR = 0: GOSUB 1850: PRINT D$;"IN#";S4:OX = X:OY = Y
5160 PRINT CHR$(12);: FOR J = 0 TO 9
5165 INPUT "";X,Y,B: IF (NR >1) AND ((X < >OX) OR (Y < >OY)) THEN PRINT CHR$(12);: GOTO 5200
5170 NEXT : PRINT CHR$(12);: FOR J = 0 TO 9
5180 INPUT "";X,Y,B: IF (NR >1) AND ((X < >OX) OR (Y < >OY)) THEN 5200
5190 NEXT :X = OX:Y = OY:NR = NR +1: GOTO 5160
5200 GOSUB 57000: POKE 3092,0
5205 T9 = 4:T8 = 0: GOSUB 10
5210 IF (X >11) AND (X <31) AND (Y >92) AND (Y <108) THEN 5225
5215 GOSUB 1800
5220 GOSUB 57000:I9 = 1: GOSUB 1900:ND = 1: GOSUB 56000: GOSUB 54100: GOSUB 170: GOSUB 1850: GOTO 5205
5225 POKE 3092,1: POKE 32,1: POKE 33,16: POKE 34,11: POKE 35,23: PRINT CHR$(12);: POKE 3092,0: GOSUB 57500: GOSUB 170
5230 CC = 4:CR = 12:SV$(5) = SV$(1):SV$(1) = SV$(2): GOSUB 2150
5240 GOSUB 57000:I9 = 1: GOSUB 1900:ND = 2: GOSUB 56000: GOSUB 54100
5250 GOSUB 1850:T9 = 4:T8 = 0
5260 GOSUB 10: GOSUB 1620: IF SH < >4 THEN 5260
5265 PX = X:PY = Y
5270 GOSUB 2170: GOSUB 60200
5280 IKE = 1:MASK = 8:X = SX:Y = SY: GOSUB 1700
5285 IKE = 9:MASK = 9:Y = TY: PRINT CHR$(14);: GOSUB 1700: PRINT CHR$(18);:IKE = 2:Y = TY -RR: GOSUB 1700
5290 IKE = FI:MASK = 10:X = CX:Y = CY: GOSUB 1700
5300 GOSUB 170: GOSUB 54100:GV = 0
5310 CC = 17:CR = 20:SV$(1) = SV$(5): GOSUB 2150: GOSUB 1850
5320 T9 = 4:T8 = 0: GOSUB 10: GOSUB 1620: IF SH < >4 THEN 5320
5325 PX = X:PY = Y
5330 GOSUB 2170: GOSUB 170: GOSUB 54100
5340 GV = GV +1: IF GV = 2 THEN 5400
5345 IF (GV < >1) THEN 5310
5350 IKE = 4:MASK = 10: FOR I = 0 TO 9:X = 7 +I *25:Y = 20: GOSUB 1700: NEXT
5360 GOTO 5310
5400 REM Choose your path
5410 POKE 32,1: POKE 33,38: POKE 34,11: POKE 35,23: POKE 3092,1: PRINT CHR$(12);: POKE 3092,0
5420 HCOLOR= 3: FOR I = -2 TO 2: HPLOT 140 -I,82 TO 140 -I,189: NEXT : HCOLOR= 0
5425 POKE 32,2: POKE 33,16: POKE 34,12: POKE 35,18: PRINT CHR$(12);: GOSUB 54110
5430 POKE 32,22: POKE 33,16: POKE 34,12: POKE 35,18: PRINT CHR$(12);: GOSUB 54110
5440 GOSUB 57500
5450 GOSUB 1850:T9 = 4:T8 = 0: GOSUB 10
5460 IF (X <140) THEN 5500
5470 GOTO 5600
5500 REM Quit for now
5510 GOSUB 62000
5520 POKE 3092,0
5530 GOSUB 57500: PRINT CHR$(14); CHR$(12)
5540 GOSUB 54100: PRINT D$;"CLOSE ";N$
5550 GOTO 5550
5600 REM Go to mousepaint
5610 GOSUB 62000
5620 POKE 3092,0
5630 GOSUB 57500: PRINT CHR$(14); CHR$(12)
5640 ND = 1: GOSUB 56000: GOSUB 54100
5645 PRINT D$;"CLOSE ";N$: PRINT D$;"PR#0": PRINT D$;"RUN MOUSEPAINT"
9000 PRINT D$;"IN#0": GOSUB 62000
9010 GOSUB 62050
9020 PRINT "YOU HAVE NO MOUSE CARD INSTALLED,"
9030 PRINT "OR YOUR MOUSE CARD IS IN SLOT THREE."
9100 VTAB 22: END
9200 PRINT D$;"IN#0"
9210 GOSUB 62050
9220 PRINT "MOUSE CARD SHOULD NOT BE"
9230 PRINT "IN SLOT THREE. (BUT IT IS.)"
9240 VTAB 22: END
51000 REM HANDLE COMMANDS
51010 IF S$ < >"%p" THEN 51100
51020 VTAB 1: HTAB 1: PRINT CHR$(12);: RETURN
51100 IF S$ < >"%m" THEN 51200
51150 INPUT I9: POKE A9 +8,RN: CALL A9: FOR I8 = 0 TO 2:M9(I9,I8) = PEEK(A9 +9 +I8): NEXT : RETURN
51200 IF S$ < >"%s" THEN 51400
51210 INPUT I9: INPUT SV$(I9):SN(I9) = VAL(SV$(I9)): RETURN
51400 IF S$ < >"%e" THEN 51500
51450 PRINT CHR$(29): RETURN
51500 IF S$ < >"%r" THEN 51600
51520 INPUT I9: VTAB I9: RETURN
51600 IF S$ < >"%@" THEN 51900
51650 INPUT I9,I8: VTAB I8: HTAB I9: RETURN
51900 RETURN
52000 REM set up menu parameters
52002 MC = 17:MR = 12:TL = 38 -MC
52005 FOR I = 0 TO 3:ML(I,0) = MC: FOR J = 0 TO 2:MT$(J,I) = "": NEXT : NEXT
52010 PRINT D$;"READ ";N$: INPUT NB:MS = 0
52020 FOR I = 0 TO NB -1: INPUT MT$(I,0):ML(I +1,0) = LEN(MT$(I,0)) +ML(I,0)
52030 INPUT NS:K = 0: FOR J = 1 TO NS: INPUT MT$(I,J): IF LEN(MT$(I,J)) >K THEN K = LEN(MT$(I,J))
52040 NEXT :ML(I,1) = K: IF NS >MS THEN MS = NS
52050 NEXT : RETURN
52100 REM Display menu bar
52105 POKE 32,MC: POKE 33,TL: POKE 34,MR: POKE 35,MR +1: PRINT CHR$(12);
52110 GOSUB 57500: VTAB MR +1: HTAB MC +1: FOR I = 0 TO NB -1: PRINT MT$(I,0);: NEXT
52120 MX = MC *7 -1:MY = MR *8 -1: HPLOT MX,MY TO MX +TL *7,MY TO MX +TL *7,MY +8 TO MX,MY +8 TO MX,MY
52130 POKE 3092,1: POKE 32,MC: POKE 33,39 -MC: POKE 34,MR +1: POKE 35,MR +MS +1: PRINT CHR$(12);: POKE 3092,0: GOSUB 57500
52140 RETURN
52200 REM Set up for entering menu
52210 BOX = -1:SU = -1:T9 = 4:T8 = 0: FOR I = 0 TO 2: FOR J = 0 TO 3:VI(I,J) = 0: NEXT : NEXT : RETURN
53000 REM Initialize variables
53010 D$ = CHR$(4):ADDR = 3840:DBASE = 3888
53020 OX = 0:OY = 80:X = 0:Y = 80:XL = 272:YL = 189
53030 CC = 17:CR = 20:BY = -1:BX = -1:L = 0:B = 0
53040 SV$(2) = " Shapes "
53050 GOSUB 57500
53060 A8 = 6064
53900 RETURN
54000 REM OPEN FILE IN N$
54010 PRINT D$;"OPEN ";N$
54020 PRINT D$;"READ ";N$
54030 A9 = 4736: REM $1280
54040 FOR I9 = 1 TO 7: POKE A9 +8,I9: CALL A9: IF PEEK(A9 +6) = 0 THEN RN = I9
54050 NEXT
54090 RETURN
54100 REM Do file
54105 PRINT CHR$(14);
54110 PRINT D$;"READ ";N$
54120 S$ = "": INPUT S$
54130 IF S$ = "" THEN 54200
54140 IF LEFT$(S$,1) < >"%" THEN 54200
54145 IF S$ = "%w" THEN GOTO 54900
54150 GOSUB 51000: GOTO 54120
54200 PRINT S$
54210 GOTO 54120
54900 PRINT CHR$(18);: RETURN
56000 REM DISCARD <<N>>
56005 IF ND = 0 THEN 56900
56010 PRINT D$;"READ ";N$
56015 FOR I9 = 1 TO ND
56020 S$ = "": INPUT S$
56030 IF S$ < >"%w" THEN 56020
56040 NEXT
56900 RETURN
57000 REM SET WINDOW
57010 POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,10: RETURN
57500 REM FULL SCREEN
57510 POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24: RETURN
58000 REM Erase menu bar
58010 POKE 3092,1: POKE 32,MC -1: POKE 33,39 -MC: POKE 34,MR -1: POKE 35,MR +1: PRINT CHR$(12);: POKE 3092,0: GOSUB 57000: RETURN
59000 REM SET UP FILES
59010 D$ = CHR$(4)
59020 PRINT D$;"BLOAD SYSTEM.CHARSET,A$800,L$400"
59030 PRINT D$;"BLOAD HIRES.TEXT.0"
59040 PRINT D$;"BLOAD ICON.STUFF.0"
59045 PRINT D$;"BLOAD MOUSE.STUFF.0,A$1200"
59050 PRINT D$;"BLOAD TABLE.FILE,A$1300"
59055 PRINT D$;"BLOAD MARK.STUFF.0,A$1280"
59070 RETURN
59100 REM Set up hi-res hooks
59110 D$ = CHR$(4): PRINT D$;"PR#A$C00"
59120 PRINT CHR$(12): HGR
59130 POKE -16302,0: REM FULL SCREEN
59190 RETURN
59300 REM INITIALIZE MOUSE
59310 A = 50944:S4 = 0: FOR I = 1 TO 7
59320 IF ( PEEK(A +12) = 32) AND ( PEEK(A +251) = 214) AND (S4 = 0) THEN S4 = 8 -I
59325 A = A -256: NEXT : IF S4 = 0 THEN RETURN
59327 IF (S4 = 3) AND ( PEEK( -1101) = 6) THEN S4 = -1: RETURN
59330 POKE 1144,0: POKE 1400,0: POKE 1272,23: POKE 1528,1: POKE 4608,0
59335 POKE 4612,192 +S4: POKE 4613,S4 *16: CALL 4609
59340 PRINT D$;"PR#";S4: PRINT CHR$(1)
59350 PRINT D$;"PR#A$C00"
59360 POKE 1144,0: POKE 1400,0: POKE 1272,23: POKE 1528,1: POKE 4608,0
59365 POKE 4612,192 +S4: POKE 4613,S4 *16: CALL 4609
59370 POKE 1144,80: POKE 1400,0: POKE 1272,191: POKE 1528,0: POKE 4608,1: CALL 4609
59380 POKE 4608,3: CALL 4609: REM Read mouse
59390 RETURN
59400 REM Force mouse parameters
59410 IF X >255 THEN POKE 1144 +S4,X = 256: POKE 1400 +S4,1: GOTO 59435
59430 POKE 1144 +S4,X: POKE 1400 +S4,0
59435 POKE 1272 +S4,Y: POKE 1528 +S4,0
59440 POKE 4608,2: CALL 4609
59450 RETURN
60200 REM Plot SHAPES box
60210 POKE 32,1: POKE 33,14: POKE 34,12: POKE 35,22: PRINT CHR$(12)
60220 HPLOT 7,95 TO 105,95 TO 105,176 TO 7,176 TO 7,95: HPLOT 7,104 TO 105,104
60230 GOSUB 57500: VTAB 13: HTAB 3: PRINT CHR$(16); CHR$(26); CHR$(16); CHR$(30);" "; CHR$(14);SV$(2); CHR$(18)
60240 GOSUB 57000
60250 RETURN
62000 REM TURN OFF MOUSE; END
62010 PRINT D$;"IN#0":
62020 PRINT D$;"PR#";S4: PRINT CHR$(0)
62040 PRINT D$;"IN#0": PRINT D$;"PR#A$C00"
62045 RETURN
62050 PRINT D$;"CLOSE": PRINT D$;"PR#0"
62060 RETURN
62100 REM ERROR HANDLING
62105 POKE 216,0
62110 GOSUB 62000: GOSUB 62050: TEXT
62120 HOME :I = PEEK(218) + PEEK(219) *256:J = PEEK(222)
62125 IF J = 255 THEN PRINT "OOPS. YOU PRESSED CONTROL-C.": GOTO 62135
62130 PRINT "ERROR ";J;" IN LINE ";I
62135 PRINT : PRINT "PLEASE PRESS CONTROL-RESET": PRINT "TO START OVER."
62140 D$ = CHR$(4): PRINT D$;"CLOSE"
62150 GOTO 62150